package com.lzs.bootsafety.common.config.shiro.session;

import org.apache.shiro.web.filter.PathMatchingFilter;
import org.springframework.beans.factory.annotation.Autowired;

import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 * @Author LiuZhanShi
 * @Date 2020/7/31 9:45
 * @Version 1.0
 */

public class SyncOnlineSessionFilter extends PathMatchingFilter {
    @Autowired
    private MySessionDAO sessionDAO;

    /**
     * 同步会话数据到DB 一次请求最多同步一次 防止过多处理 需要放到Shiro过滤器之前
     */
    @Override
    protected boolean onPreHandle(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception {
        OnlineSession session = (OnlineSession) request.getAttribute("online_session");
        // 如果session stop了 也不同步
        // session停止时间，如果stopTimestamp不为null，则代表已停止
        if (session != null && session.getUserId() != null && session.getStopTimestamp() == null) {
            sessionDAO.syncToDb(session);
        }
        return true;
    }
}
